﻿using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category0
{
  public class MT067 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagDefinition U0002;
    private static SwiftTagSubItemDefinition U0003;
    private static SwiftTagSequenceDefinition U0004;
    private static SwiftTagDefinition U0005;
    private static SwiftTagSubItemDefinition U0006;
    private static SwiftTagSequenceDefinition U0007;
    private static SwiftTagDefinition U0008;
    private static SwiftTagSubItemDefinition U000E;
    private static SwiftTagSubItemDefinition U000F;
    private static SwiftTagDefinition U0010;
    private static SwiftTagSubItemDefinition U0011;
    private static SwiftTagSubItemDefinition U0012;
    private static SwiftTagSubItemDefinition U0013;
    private static SwiftTagSubItemDefinition U0014;
    private static SwiftTagSubItemDefinition U0015;
    private static SwiftTagSubItemDefinition U0016;
    private static SwiftTagSubItemDefinition U0017;
    private static SwiftTagSubItemDefinition U0018;
    private static SwiftTagSubItemDefinition U0019;
    private static SwiftTagSubItemDefinition U001A;

    [Description("ValueDateOrdering")]
    public Tag206 ValueDateOrdering_206
    {
      get
      {
        return new Tag206((SwiftElement) this, 0, (SwiftDefinitionElement) MT067.U0002);
      }
    }

    [Description("ValueDateOrdering")]
    public Tag206 Tag206_ValueDateOrdering
    {
      get
      {
        return this.ValueDateOrdering_206;
      }
    }

    [Description("")]
    public MT067.PriorityAndDeliverySubset_SequenceClass PriorityAndDeliverySubset_Sequence
    {
      get
      {
        return new MT067.PriorityAndDeliverySubset_SequenceClass((SwiftElement) this, 0, false);
      }
    }

    public MT067()
      : base(true)
    {
    }

    public MT067(SwiftMessage message)
      : base(message)
    {
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT067.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT067.MessageDefinition = new SwiftMessageDefinition("MT067", "Delivery Instructions Redefinition Report");
      MT067.U0002 = new SwiftTagDefinition("ValueDateOrdering_206", "ValueDateOrdering");
      MT067.U0002.TagName = "{206:";
      MT067.U0003 = new SwiftTagSubItemDefinition("ValueDateOrdering", "ValueDateOrdering");
      MT067.U0002.Elements.Add((SwiftDefinitionElement) MT067.U0003);
      MT067.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT067.U0002);
      MT067.U0004 = new SwiftTagSequenceDefinition("PriorityAndDeliverySubset_Sequence", "");
      MT067.U0005 = new SwiftTagDefinition("DeliverySubsetName_339", "Name assigned by the user to a delivery subset");
      MT067.U0005.TagName = "{339:";
      MT067.U0006 = new SwiftTagSubItemDefinition("DeliverySubsetName", "Name assigned by the user to a delivery subset");
      MT067.U0005.Elements.Add((SwiftDefinitionElement) MT067.U0006);
      MT067.U0004.Elements.Add((SwiftDefinitionElement) MT067.U0005);
      MT067.U0007 = new SwiftTagSequenceDefinition("PriorityAndMessageTypeService_Sequence", "");
      MT067.U0008 = new SwiftTagDefinition("PriorityCategory_344", "Priority Category");
      MT067.U0008.TagName = "{344:";
      MT067.U000E = new SwiftTagSubItemDefinition("Priority", "Priority");
      MT067.U0008.Elements.Add((SwiftDefinitionElement) MT067.U000E);
      MT067.U000F = new SwiftTagSubItemDefinition("MessageCategory", "Message Category");
      MT067.U000F.Mandatory = false;
      MT067.U0008.Elements.Add((SwiftDefinitionElement) MT067.U000F);
      MT067.U0007.Elements.Add((SwiftDefinitionElement) MT067.U0008);
      MT067.U0010 = new SwiftTagDefinition("MessageTypeServiceCodeList_345", "Message Type Service Code List");
      MT067.U0010.TagName = "{345:";
      MT067.U0010.Mandatory = false;
      MT067.U0011 = new SwiftTagSubItemDefinition("Line1", "Message Type 1");
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0011);
      MT067.U0012 = new SwiftTagSubItemDefinition("Line2", "Message Type 2");
      MT067.U0012.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0012);
      MT067.U0013 = new SwiftTagSubItemDefinition("Line3", "Message Type 3");
      MT067.U0013.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0013);
      MT067.U0014 = new SwiftTagSubItemDefinition("Line4", "Message Type 4");
      MT067.U0014.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0014);
      MT067.U0015 = new SwiftTagSubItemDefinition("Line5", "Message Type 5");
      MT067.U0015.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0015);
      MT067.U0016 = new SwiftTagSubItemDefinition("Line6", "Message Type 6");
      MT067.U0016.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0016);
      MT067.U0017 = new SwiftTagSubItemDefinition("Line7", "Message Type 7");
      MT067.U0017.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0017);
      MT067.U0018 = new SwiftTagSubItemDefinition("Line8", "Message Type 8");
      MT067.U0018.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0018);
      MT067.U0019 = new SwiftTagSubItemDefinition("Line9", "Message Type 9");
      MT067.U0019.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U0019);
      MT067.U001A = new SwiftTagSubItemDefinition("Line10", "Message Type 10");
      MT067.U001A.Mandatory = false;
      MT067.U0010.Elements.Add((SwiftDefinitionElement) MT067.U001A);
      MT067.U0007.Elements.Add((SwiftDefinitionElement) MT067.U0010);
      MT067.U0004.Elements.Add((SwiftDefinitionElement) MT067.U0007);
      MT067.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT067.U0004);
    }

    public class PriorityAndDeliverySubset_SequenceClass : SwiftTagSequence
    {
      internal override SwiftDefinitionElement Definition
      {
        get
        {
          return (SwiftDefinitionElement) MT067.U0004;
        }
      }

      [Description("Name assigned by the user to a delivery subset")]
      public Tag339 DeliverySubsetName_339
      {
        get
        {
          return new Tag339((SwiftElement) this, 0, (SwiftDefinitionElement) MT067.U0005);
        }
      }

      [Description("Name assigned by the user to a delivery subset")]
      public Tag339 Tag339_DeliverySubsetName
      {
        get
        {
          return this.DeliverySubsetName_339;
        }
      }

      [Description("")]
      public MT067.PriorityAndDeliverySubset_SequenceClass.PriorityAndMessageTypeService_SequenceClass PriorityAndMessageTypeService_Sequence
      {
        get
        {
          return new MT067.PriorityAndDeliverySubset_SequenceClass.PriorityAndMessageTypeService_SequenceClass((SwiftElement) this, 0, false);
        }
      }

      internal PriorityAndDeliverySubset_SequenceClass(SwiftElement parent, int index, bool createTags)
        : base(parent, index, createTags)
      {
      }

      public class PriorityAndMessageTypeService_SequenceClass : SwiftTagSequence
      {
        internal override SwiftDefinitionElement Definition
        {
          get
          {
            return (SwiftDefinitionElement) MT067.U0007;
          }
        }

        [Description("Priority Category")]
        public Tag344 PriorityCategory_344
        {
          get
          {
            return new Tag344((SwiftElement) this, 0, (SwiftDefinitionElement) MT067.U0008);
          }
        }

        [Description("Priority Category")]
        public Tag344 Tag344_PriorityCategory
        {
          get
          {
            return this.PriorityCategory_344;
          }
        }

        [Description("Message Type Service Code List")]
        public Tag345 MessageTypeServiceCodeList_345
        {
          get
          {
            return new Tag345((SwiftElement) this, 0, (SwiftDefinitionElement) MT067.U0010);
          }
        }

        [Description("Message Type Service Code List")]
        public Tag345 Tag345_MessageTypeServiceCodeList
        {
          get
          {
            return this.MessageTypeServiceCodeList_345;
          }
        }

        internal PriorityAndMessageTypeService_SequenceClass(SwiftElement parent, int index, bool createTags)
          : base(parent, index, createTags)
        {
        }
      }
    }
  }
}
